#ifndef COLOROUTPUT_HPP_
#define COLOROUTPUT_HPP_ value

#define RST   "\033[0m"
#define FRST  "\033[39m"
#define BRST  "\033[49m"
#define KFBLA "\033[30m"
#define KFRED "\033[31m"
#define KFGRN "\033[32m"
#define KFYEL "\033[33m"
#define KFBLU "\033[34m"
#define KFMAG "\033[35m"
#define KFCYN "\033[36m"
#define KFWHT "\033[37m"
#define KBBLA "\033[40m"
#define KBRED "\033[41m"
#define KBGRN "\033[42m"
#define KBYEL "\033[43m"
#define KBBLU "\033[44m"
#define KBMAG "\033[45m"
#define KBCYN "\033[46m"
#define KBWHT "\033[47m"

#define FBLA(x) KFBLA x FRST
#define FRED(x) KFRED x FRST
#define FGRN(x) KFGRN x FRST
#define FYEL(x) KFYEL x FRST
#define FBLU(x) KFBLU x FRST
#define FMAG(x) KFMAG x FRST
#define FCYN(x) KFCYN x FRST
#define FWHT(x) KFWHT x FRST
#define BBLA(x) KBBLA x BRST
#define BRED(x) KBRED x BRST
#define BGRN(x) KBGRN x BRST
#define BYEL(x) KBYEL x BRST
#define BBLU(x) KBBLU x BRST
#define BMAG(x) KBMAG x BRST
#define BCYN(x) KBCYN x BRST
#define BWHT(x) KBWHT x BRST

#define BOLD(x) "\033[1m" x "\033[21m"
#define UNDL(x) "\033[4m" x "\033[24m"
#define INVE(x) "\033[7m" x "\033[27m"

#define FBLAX(x) (std::string(KFBLA) + x + std::string(FRST))
#define FREDX(x) (std::string(KFRED) + x + std::string(FRST))
#define FGRNX(x) (std::string(KFGRN) + x + std::string(FRST))
#define FYELX(x) (std::string(KFYEL) + x + std::string(FRST))
#define FBLUX(x) (std::string(KFBLU) + x + std::string(FRST))
#define FMAGX(x) (std::string(KFMAG) + x + std::string(FRST))
#define FCYNX(x) (std::string(KFCYN) + x + std::string(FRST))
#define FWHTX(x) (std::string(KFWHT) + x + std::string(FRST))
#define BBLAX(x) (std::string(KBBLA) + x + std::string(BRST))
#define BREDX(x) (std::string(KBRED) + x + std::string(BRST))
#define BGRNX(x) (std::string(KBGRN) + x + std::string(BRST))
#define BYELX(x) (std::string(KBYEL) + x + std::string(BRST))
#define BBLUX(x) (std::string(KBBLU) + x + std::string(BRST))
#define BMAGX(x) (std::string(KBMAG) + x + std::string(BRST))
#define BCYNX(x) (std::string(KBCYN) + x + std::string(BRST))
#define BWHTX(x) (std::string(KBWHT) + x + std::string(BRST))

#define BOLDX(x) (std::string("\033[1m") + x + std::string("\033[21m"))
#define UNDLX(x) (std::string("\033[4m") + x + std::string("\033[24m"))
#define INVEX(x) (std::string("\033[7m") + x + std::string("\033[27m"))

#define MAIN_BG(x)      "\033[48;5;18m" x BRST
#define RAIL_BG(x)      "\033[48;5;250m" x BRST
#define RAIL_DARK_BG(x) "\033[48;5;246m" x BRST
#define BLOCK_GREEN(x)  "\033[48;5;28m" x BRST
#define PERFECT_TEXT(x) "\033[38;5;45m" x FRST
#define GOOD_TEXT(x)    "\033[38;5;40m" x FRST
#define MISS_TEXT(x)    "\033[38;5;203m" x FRST

#endif // ifndef COLOROUTPUT_HPP_
